package br.com.nemesis.dao;

import br.com.nemesis.modelo.Cidade;

import br.com.nemesis.excecao.PersistenciaExcecao;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.NoResultException;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

public class CidadeDAO extends DAOGenerico< Cidade , Long > {

    public List<Cidade> listar(String nome) throws PersistenciaExcecao {
        try {
            CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
            CriteriaQuery criteriaQuery = criteriaBuilder.createQuery();
            Root<Cidade> cidade = criteriaQuery.from(Cidade.class);
            List<Predicate> predicados = new ArrayList<Predicate>();

            if(nome!=null&&!nome.equals("")){
                predicados.add(criteriaBuilder.like(cidade.<String>get("nome"), nome ));
            }

            if (predicados.size() > 0) {
                criteriaQuery.where(criteriaBuilder.and(predicados.toArray(new Predicate[]{})));
            }
            
            criteriaQuery.orderBy( criteriaBuilder.asc( cidade.<String>get("nome") ) );
            return getEntityManager().createQuery(criteriaQuery).getResultList();
        } catch (NoResultException e) {
            return null;
        } catch (Exception e){
            throw new PersistenciaExcecao(e.getMessage());
        }
    }

}